#!/usr/bin/env ruby
require 'optparse'
require_relative 'common'

@help = <<~HELP
  切换 openSuse 系统软件源的工具。
  该工具接受一个参数，它是提供者的名称。执行该工具后，会禁用其他软件源，仅仅启用该提供者的软件源。
  
  现在支持的提供者包括：

  #{vendors_help}

  示例：

      repos switch aliyun

HELP

def find_repo_names(vendor_key)
  version = find_opensuse_version('full')
  vendor = @vendors[vendor_key.to_sym][:name]

  repo_names = get_categories(version).map { |category| normalize_repo_name(vendor, version, category) }
end

def disable(vendor_key)
  repo_names = find_repo_names(vendor_key)
  system("sudo zypper modifyrepo --disable #{repo_names.join(' ')}")
end

def enable(vendor_key)
  repo_names = find_repo_names(vendor_key)
  system("sudo zypper modifyrepo --enable #{repo_names.join(' ')}")
end

def get_categories(version)
  @categories[version[0].to_sym]
end

ARGV.push('--help') if ARGV.empty?
begin
  OptionParser.new do |opts|
    opts.banner = @help
  end.parse!
rescue OptionParser::ParseError => ex
  STDERR.puts ex.message
  exit 1
end

if ARGV.length > 1
  STDERR.puts '只可提供一个提供者' 
  exit 1
else
  vendor_key = ARGV[0].downcase
end
unless @vendors.keys.include?(vendor_key.to_sym)
  STDERR.puts '未发现提供者' 
  exit 2
end

puts "禁用所有软件源"
@vendors.keys.each { |vendor_key| disable(vendor_key) }

puts "\n启用指定软件源"
enable(vendor_key)
